package com.fessc.develop.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.alibaba.fastjson.parser.Feature;

import java.util.Map;

public class JsonUtils {

    public JsonUtils() {
    }

    public static String objToJSON(Object value) throws Exception {
        return JSON.toJSONString(value);
    }

    public static <T> T jsonToObj(String json, Class<T> cls) throws Exception {
        return JSON.parseObject(json, cls);
    }


    public static Map<String, String> getMapObj(String json) throws Exception {
        return (Map<String, String>) JSON.parseObject(json, new TypeReference<Map<String, String>>() {
        }, new Feature[0]);
    }

    public static void appendStruct(StringBuilder json, String structName, String value, boolean hasNext) {
        json.append("\"");
        json.append(structName);
        json.append("\":");
        json.append(value);
        if (hasNext) {
            json.append(",");
        } else {
            json.append("}");
        }

    }

    public static void appendField(StringBuilder json, String fieldName, String value, boolean hasNext) {
        json.append("\"");
        json.append(fieldName);
        json.append("\":\"");
        json.append(value);
        json.append("\"");
        if (hasNext) {
            json.append(",");
        } else {
            json.append("}");
        }
    }

    public static String fieldValueReplace(String jsonStr, String fieldName, String replaceStr) {
        JSONObject object = JSONObject.parseObject(jsonStr);
        String fieldValue = object.getString(fieldName);
        if (BusiUtil.isNotNull(fieldValue) && fieldValue.length() > 100) {
            object.put(fieldName, fieldValue.substring(0, 100) + replaceStr);
        }
        return JSON.toJSONString(object);
    }

}
